package cn.jji8.patronSaint;

import org.bukkit.plugin.Plugin;

import java.util.ArrayList;
import java.util.List;

/**
 * 全局加载器，用于实现动态加载功能
 * 很多功能可能在其他插件里用不到，所以在各个功能的static方法里会将加载器注册到这个里，
 * 这样就可以在插件加载时完成功能的加载
 * */
public class GlobalLoader {
    public interface Task{
        /**
         * 会调用此方法
         * */
        void onTask(Plugin plugin);
    }
     //准备插件加载时调用的
    static final List<Task> onEnablTaskList = new ArrayList<>();
    //插件关闭时调用的
    static final List<Task> onDisableTaskList = new ArrayList<>();
    //插件的主类
    static Plugin main = null;
    /**
     * 如果插件已经插件，则直接调用
     * @param lod 加载时必要的代码，但又不能在服务器加载前执行的
     * */
    public static void onEnablTask(Task lod){
        if(main==null){
            onEnablTaskList.add(lod);
        }else {
            lod.onTask(main);
        }
    }
    /**
     * 在关服时被调用的
     * */
    public static void onDisableTask(Task lod){
        onDisableTaskList.add(lod);
    }
    /**
     * 在主类被调用
     * */
    static void onEnable(Plugin plugin){
        main = plugin;
        for (Task load : onEnablTaskList) {
            load.onTask(plugin);
        }
    }
    /**
     * 在主类被调用
     * */
    static void onDisable(Plugin plugin){
        for (Task task : onDisableTaskList) {
            task.onTask(plugin);
        }
    }

}
